package com.yifeng.dao;

import com.yifeng.model.News;
import com.yifeng.model.News;
import com.yifeng.model.User;

import java.util.List;


public interface NewsDao {



    /*
    负责人：xiaoq

    功能：根据新闻类型列表查询新闻，支持按多种类型筛选

    参数：types - 新闻类型集合

    返回值：符合条件的新闻列表
    */
    List<News> findByTypes(List<String> types);




    /*
    负责人：xiaoq

    功能：查询包含图片的新闻，用于展示有配图的新闻内容

    参数：无

    返回值：含图片的新闻列表
    */

    List<News> findWithImages();


    /*
    负责人：xiaoq

    功能：根据关键词在标题和内容中模糊搜索新闻，支持新闻搜索功能

    参数：keyword - 搜索关键词

    返回值：匹配关键词的新闻列表
    */

    List<News> searchByKeyword(String keyword);

    /*
    负责人：xiaoq

    功能：分页查询新闻列表，支持新闻列表的分页展示

    参数：offset - 数据偏移量, pageSize - 每页记录数

    返回值：当前页的新闻列表
    */

    List<News> findPaginated(int offset, int pageSize);


    /*
    负责人：xiaoq

    功能：根据新闻ID查询单条已发布新闻详情，用于新闻详情页展示

    参数：newsId - 新闻唯一标识ID

    返回值：新闻对象，未找到或未发布返回null
    */
    News findById(int newsId);



    /*
    负责人：xiaoq

    功能：分页查询所有新闻，支持新闻管理界面的分页展示

    参数：offset - 数据偏移量, limit - 每页记录数

    返回值：新闻列表
    */

    List<News> findAllPaginated(int offset, int limit);
    /*
    负责人：xiaoq

    功能：按状态分页查询新闻，支持按新闻状态筛选管理

    参数：status - 新闻状态, offset - 数据偏移量, limit - 每页记录数

    返回值：指定状态的新闻列表
    */
    List<News> findByStatusPaginated(int status, int offset, int limit);


    /*
    负责人：xiaoq

    功能：检查新闻ID是否存在，用于新闻操作前的验证

    参数：newsId - 新闻唯一标识ID

    返回值：存在返回true，不存在返回false
    */
    boolean existsById(Integer newsId);

    /*
    负责人：xiaoq

    功能：插入新新闻记录，用于新闻发布功能

    参数：news - 包含新闻信息的News对象

    返回值：插入成功返回true，失败返回false
    */
    boolean insert(News news);

    /*
    负责人：xiaoq

    功能：更新新闻记录，用于新闻编辑功能

    参数：news - 包含更新后新闻信息的News对象

    返回值：更新成功返回true，失败返回false
    */
    boolean update(News news);

    /*
    负责人：xiaoq

    功能：根据新闻ID删除新闻记录，实现新闻管理中的删除功能

    参数：newsId - 新闻唯一标识ID

    返回值：删除成功返回true，失败返回false
    */
    boolean deleteById(Integer newsId);


    //不分页返回新闻列表
    List<News> findByStatus(int status);
    List<News> findAll();


}